package ru.chezclif.lern.conread;
import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import ru.chezclif.lern.conread.parser.PathDataInputProperties;
/**
 * Распознование типа файла по содержимому
 * @author Vit
 *
 */
public class FileParser implements PathDataInputProperties {
	private String standartLine = "";
	@Override
	/**По параметру filePath находится файл, в ходе выполнения программы узнается, к какому типу он относится и передается следующим парсерам
	 *@param filePath полный путь к оперируемому файлу
	 *@param propertyBuffer хранилище данных для заполнения*/
	public void parseFile(String filePath, DataBuffer propertyBuffer) {
		FileReader readFile;
		try {
			readFile = new FileReader(filePath);
			BufferedReader bufferForSearchSignature = new BufferedReader(readFile);
			if (!(bufferForSearchSignature.ready())) {
				throw new ru.chezclif.lern.conread.exceptions.EmptyFileExeption(filePath);
			}
			while ((standartLine = bufferForSearchSignature.readLine()) != null) {
				if (!(standartLine.trim() == "")) {
					if (standartLine.charAt(0) == '#') {
						PropertyParser parserProperties = new PropertyParser();
						parserProperties.parseFile(filePath, propertyBuffer);
						break;
					}
				}
				if (!(standartLine.trim() == "")) {
					if (standartLine.charAt(0) == ';') {
						IniParser parserProperties = new IniParser();
						parserProperties.parseFile(filePath, propertyBuffer);
						break;
					}
				}
				if (!(standartLine.trim() == "")) {
					if (standartLine.charAt(0) == '<') {
						XmlParser parserProperties = new XmlParser();
						parserProperties.parseFile(filePath, propertyBuffer);
						break;
					}
				}
			}
			bufferForSearchSignature.close();
		} catch (FileNotFoundException e) {
			throw new ru.chezclif.lern.conread.exceptions.FileNotFoundException(e, filePath);
		} catch (IOException e) {
			throw new ru.chezclif.lern.conread.exceptions.FileNotFoundException(e, filePath);
		}
	}
}
